// axios进行二次封装解决返回值问题

import { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError, AxiosPromise } from "axios";
import { Interceptors } from './request' 
// 创建约束 [接口]
/* interface successType<T = any> {
    code: number,
    message: string,
    data: T,
    success: boolean,
} */
// 创建请求类
class HttpServer {
    // 创建属性[axios] 以 [AxiosInstance] 为约束
    axios: AxiosInstance
    constructor() {
        // 实例化[Interceptors]拦截器
        this.axios = new Interceptors().getInterceptors()
    }
    // [request]方法 约束为[T和K任意类型] 参数[config]值为[AxiosRequestConfig]约束为[T],
   /*  request<T, K = any>(config: AxiosRequestConfig<T>): AxiosPromise<successType<K>> {
        console.log(config);
        
        return new Promise((resolve, reject) => {
            this.axios(config).then((res: AxiosResponse<successType<K>, T>) => {
                resolve(res) //返回层级太深加data下一级,有红线不影响程序运行
            }).catch((err: AxiosError) => {
                reject(err)
            })
        })
    } */
    request<T>(config: AxiosRequestConfig) {  
        return this.axios.request<T>(config).then(res => res.data);
    }
   /*  request<successType>(config: AxiosRequestConfig) {  
        return this.axios.request<successType>(config).then(res => res.data);
    } */
}

// 实例化 HttpServer 类
const http = new HttpServer()

export default http
